// Service Worker 版本号
const SW_VERSION = '1.0.0';

// 缓存名称
const CACHE_NAME = `chat-cache-${SW_VERSION}`;

// 需要缓存的API请求URL pattern
const API_PATTERNS = [
  '/api/industrial/process_stream'
];

// 安装事件
self.addEventListener('install', (event) => {
  console.log('[ServiceWorker] 安装');
  // 跳过等待,直接激活
  event.waitUntil(self.skipWaiting());
});

// 激活事件
self.addEventListener('activate', (event) => {
  console.log('[ServiceWorker] 激活');
  // 立即接管所有页面
  event.waitUntil(self.clients.claim());
});

// 拦截fetch请求
self.addEventListener('fetch', (event) => {
  const url = new URL(event.request.url);
  
  // 检查是否是SSE请求
  if (API_PATTERNS.some(pattern => url.pathname.includes(pattern))) {
    console.log('[ServiceWorker] 拦截到SSE请求:', url.pathname);
    
    event.respondWith(
      (async () => {
        try {
          // 克隆原始请求
          const originalRequest = event.request.clone();
          
          // 发起请求
          const response = await fetch(originalRequest);
          
          // 检查响应是否成功
          if (!response.ok) {
            throw new Error(`请求失败: ${response.status}`);
          }
          
          // 创建TransformStream来处理响应数据
          const transformStream = new TransformStream({
            transform(chunk, controller) {
              // 这里可以对数据进行处理
              console.log('[ServiceWorker] 收到数据:', chunk);
              // 将数据传递给客户端
              controller.enqueue(chunk);
            }
          });
          
          // 将响应通过TransformStream处理后返回
          return new Response(
            response.body.pipeThrough(transformStream),
            {
              headers: response.headers,
              status: response.status,
              statusText: response.statusText
            }
          );
          
        } catch (error) {
          console.error('[ServiceWorker] 请求处理错误:', error);
          // 返回错误响应
          return new Response(JSON.stringify({ error: error.message }), {
            status: 500,
            headers: { 'Content-Type': 'application/json' }
          });
        }
      })()
    );
  }
  
  // 对于非SSE请求,直接放行
  return;
});

// 监听消息
self.addEventListener('message', (event) => {
  if (event.data && event.data.type === 'GET_VERSION') {
    event.ports[0].postMessage(SW_VERSION);
  }
}); 